/**
 * # 模块 Api 类:
 *  Authentication - 身份验证与导航
 * 
 * # 描述:
 *  提供对用户登录、注销、身份的验证和用户信息查询等功能。
 *  
 * Copyright (c), 上海沃恩信息科技有限公司.
 * All rights reserved.
 * Licensed under BSD (https://www.pittypat.work/bsd.html).
 */

package com.waln.authority.authentication;

/**
 * 提供对模块 身份验证与导航 中功能的封装和调用。
 */
@pittypat.ModuleAnnotation(presentation = pittypat.ModulePresentation.UI, allowAnonymous = false)
public final class Api extends pittypat.Module {
	/**
	 * 使用指定的用户名和密码登录到系统。
	 * 
	 * @param model
	 *            功能模型对象，其中包含了功能的参数列表、执行状态以及相关消息。
	 * @param progress
	 *            跟踪和汇报异步操作的进度。
	 * 
	 * @return pittypat.IJson 操作成功返回 用户令牌，否则返回 null。
	 * 
	 * @throws IllegalArgumentException
	 * @throws IllegalAccessException
	 * @throws ClassNotFoundException
	 * @throws InstantiationException
	 * @throws SQLException
	 * @throws PropertyVetoException
	 * @throws ConfigException
	 * @throws SecurityException
	 * @throws NoSuchMethodException
	 * @throws InvocationTargetException
	 * @throws UnsupportedEncodingException
	 * 
	 * @see pittypat.IJson
	 * @see pittypat.FunctionModel
	 * @see pittypat.IAsyncProgress
	 */
	public pittypat.IJson login(pittypat.FunctionModel<com.waln.authority.authentication.args.Login> model,
			pittypat.IAsyncProgress progress) throws IllegalArgumentException, IllegalAccessException,
			InstantiationException, ClassNotFoundException, java.sql.SQLException, java.io.UnsupportedEncodingException,
			java.lang.reflect.InvocationTargetException, NoSuchMethodException, SecurityException,
			pittypat.configuration.ConfigException, java.beans.PropertyVetoException {
		// 执行数据操作
		this.getDataService().exec(model, progress);

		// 如果操作成功，返回用户令牌
		return model.isSuccess() ? pittypat.Json.from(model.getArgs().token) : null;
	}

	/**
	 * 注销已经登录的用户。
	 * 
	 * @param model
	 *            功能模型对象，其中包含了功能的参数列表、执行状态以及相关消息。
	 * @param progress
	 *            跟踪和汇报异步操作的进度。
	 * 
	 * @return pittypat.IJson 没有输出参数，默认总是返回 null。
	 * 
	 * @throws IllegalArgumentException
	 * @throws IllegalAccessException
	 * @throws ClassNotFoundException
	 * @throws InstantiationException
	 * @throws SQLException
	 * @throws PropertyVetoException
	 * @throws ConfigException
	 * @throws SecurityException
	 * @throws NoSuchMethodException
	 * @throws InvocationTargetException
	 * @throws UnsupportedEncodingException
	 * 
	 * @see pittypat.IJson
	 * @see pittypat.FunctionModel
	 * @see pittypat.IAsyncProgress
	 */
	public pittypat.IJson logout(pittypat.FunctionModel<com.waln.authority.authentication.args.Logout> model,
			pittypat.IAsyncProgress progress) throws IllegalArgumentException, IllegalAccessException,
			InstantiationException, ClassNotFoundException, java.sql.SQLException, java.io.UnsupportedEncodingException,
			java.lang.reflect.InvocationTargetException, NoSuchMethodException, SecurityException,
			pittypat.configuration.ConfigException, java.beans.PropertyVetoException {
		// 执行数据操作
		this.getDataService().exec(model, progress);

		// model.getArgs() 没有定义输出参数
		return null;
	}

	/**
	 * 验证当前用户是否对目标功能拥有权限。
	 * 
	 * @param model
	 *            功能模型对象，其中包含了功能的参数列表、执行状态以及相关消息。
	 * @param progress
	 *            跟踪和汇报异步操作的进度。
	 * 
	 * @return pittypat.IJson 操作成功返回所有输出参数的字典，否则返回 null。
	 * 
	 * @throws IllegalArgumentException
	 * @throws IllegalAccessException
	 * @throws ClassNotFoundException
	 * @throws InstantiationException
	 * @throws SQLException
	 * @throws PropertyVetoException
	 * @throws ConfigException
	 * @throws SecurityException
	 * @throws NoSuchMethodException
	 * @throws InvocationTargetException
	 * @throws UnsupportedEncodingException
	 * 
	 * @see pittypat.IJson
	 * @see pittypat.FunctionModel
	 * @see pittypat.IAsyncProgress
	 */
	public pittypat.IJson demand(pittypat.FunctionModel<com.waln.authority.authentication.args.Demand> model,
			pittypat.IAsyncProgress progress) throws IllegalArgumentException, IllegalAccessException,
			InstantiationException, ClassNotFoundException, java.sql.SQLException, java.io.UnsupportedEncodingException,
			java.lang.reflect.InvocationTargetException, NoSuchMethodException, SecurityException,
			pittypat.configuration.ConfigException, java.beans.PropertyVetoException {
		// 执行数据操作
		this.getDataService().exec(model, progress);

		// 如果操作成功，返回所有输出参数的字典
		return model.isSuccess() ? model.getOutArgs() : null;
	}

	/**
	 * 加载指定用户拥有权限的 App 和模块的列表。
	 * 
	 * @param model
	 *            功能模型对象，其中包含了功能的参数列表、执行状态以及相关消息。
	 * @param progress
	 *            跟踪和汇报异步操作的进度。
	 * 
	 * @return pittypat.IJson 操作成功返回所有输出参数的字典，否则返回 null。
	 * 
	 * @throws IllegalArgumentException
	 * @throws IllegalAccessException
	 * @throws ClassNotFoundException
	 * @throws InstantiationException
	 * @throws SQLException
	 * @throws PropertyVetoException
	 * @throws ConfigException
	 * @throws SecurityException
	 * @throws NoSuchMethodException
	 * @throws InvocationTargetException
	 * @throws UnsupportedEncodingException
	 * 
	 * @see pittypat.IJson
	 * @see pittypat.FunctionModel
	 * @see pittypat.IAsyncProgress
	 */
	public pittypat.IJson navList(pittypat.FunctionModel<com.waln.authority.authentication.args.NavList> model,
			pittypat.IAsyncProgress progress) throws IllegalArgumentException, IllegalAccessException,
			InstantiationException, ClassNotFoundException, java.sql.SQLException, java.io.UnsupportedEncodingException,
			java.lang.reflect.InvocationTargetException, NoSuchMethodException, SecurityException,
			pittypat.configuration.ConfigException, java.beans.PropertyVetoException {
		// 执行数据操作
		this.getDataService().exec(model, progress);

		// 如果操作成功，返回所有输出参数的字典
		return model.isSuccess() ? model.getOutArgs() : null;
	}
}
